A typical shared computing system such as a utility data center includes servers and disk arrays coupled together by a network or a switch. Users run applications on the shared computing system to produce results. The applications use computing resources such as processors, memory capacity, storage capacity, and bandwidth. If the computing resources are allocated to particular applications, other applications are unable to execute on the shared computing system.
A manual technique for allocating computing resources in a shared computing system to applications employs a human operator who statically allocates resources to the application by assigning resource consumption quotas to the applications. While such a technique is adequate for small shared computing systems which are over-provisioned and which run only a few applications, such an allocation technique becomes difficult to deploy in larger systems or even systems where resources are limited.
A proposed automatic technique for allocating computing resources in a shared computing system to applications makes allocation decisions based upon probabilistic expressions of expected future resource demands supplied by users. This technique factors uncertainty into the allocation of the computing resources to the applications.
Because computing resources are expensive, often a shared computing system does not have enough resources to run all applications for users with each user receiving all of the computing resources that they desire. Often, the applications produce results with some value for a user or enterprise running the application. It would be desirable to be able to allocate the computing resources in a way which provides a maximal overall value.
What is needed is a method of allocating computing resources to applications which provides a near maximal overall value.